! \^ is added to the dialstring to force the modem to generate a data tone
ifstr 8 27 " "
ifstr 9 24 " "
!
! Write dialstring in varstrings 7, 8 & 9
matchclr
matchstr 1 21 "OK\13\10"
write "ATD^3\^^7;\13"
matchread 400
jump 101
!
@LABEL 21
matchclr
matchstr 1 22 "OK\13\10"
write "ATD^3^8;\13"
matchread 400
jump 101
!
@LABEL 22
write "ATD^3^9\13"
jump 32
!
!
@LABEL 24
! Write dialstring in varstrings 7 & 8
matchclr
matchstr 1 25 "OK\13\10"
write "ATD^3\^^7;\13"
matchread 400
jump 101
!
@LABEL 25
write "ATD^3^8\13"
jump 32
!
@LABEL 27
! Write dialstring in varstring 7
write "ATD^3\^^7\13"
!
!
! ---- Connection response ----
!
! The following section will parse modem responses of five types:
! 1) PROTOCOL: xxx, COMPRESSION: xxx, CONNECT xxx
! 2) CONNECT xxx/ARQ/V42
! 3) Standard incoming and outgoing call progress messages
! 4) FAX/DATA discrimination messages
! 5) International DELAYED & BLACKLISTED restrictions.
!
@LABEL 32
matchclr
matchstr 1 81 "RING\13\10"
matchstr 2 102 "NO DIALTONE\13\10"
matchstr 3 103 "NO CARRIER"
matchstr 4 103 "ERROR\13\10"
matchstr 5 104 "BUSY\13\10"
matchstr 6 105 "NO ANSWER\13\10"
matchstr 7 33 "CONNECT "
matchstr 8 32 "CARRIER"
matchstr 9 40 "CONNECT\13\10"
matchstr 10 62 "PROTOCOL: LAP"
matchstr 11 62 "PROTOCOL: MNP"
matchstr 12 62 "PROTOCOL: ALT"
matchstr 13 67 "COMPRESSION: V"
matchstr 14 67 "COMPRESSION: MNP5"
matchstr 15 67 "COMPRESSION: CLASS"
matchstr 16 82 "FAX\13\10"
matchstr 17 84 "DATA\13\10"
matchstr 18 110 "DELAYED "
matchstr 19 111 "BLACKLISTED\13\10"
matchread 700
ifANSWER 32
jump 101
!
! Parse the speed of connect result codes
! 1200, 2400 and 4800 have two entries each
! to distinguish them from 12000, 24000 and 48000
!
! (added 1200bps support)
!
@LABEL 33
matchclr
matchstr 1 39 "1200\13"
matchstr 2 39 "1200/"
matchstr 3 40 "2400\13"
matchstr 4 40 "2400/"
matchstr 5 41 "4800\13"
matchstr 6 41 "4800/"
matchstr 7 42 "7200"
matchstr 8 43 "9600"
matchstr 9 44 "12000"
matchstr 10 45 "14400"
matchstr 11 46 "16800"
matchstr 12 47 "19200"
matchstr 13 48 "21600"
matchstr 14 49 "24000"
matchstr 15 50 "26400"
matchstr 16 51 "28800"
matchstr 17 52 "31200"
matchstr 18 53 "33600"
matchstr 19 54 "38400"
matchstr 20 55 "48000"
matchstr 21 56 "56000"
matchstr 22 57 "57600"
matchstr 23 58 "64000"
matchread 30
jump 59
!
! -- Connection rates --
! CommunicatingAt informs ARA of the raw modem to modem
! connection speed.
!
@LABEL 39
note "Communicating at 1200 bps." 2
CommunicatingAt 1200
jump 60
!
@LABEL 40
note "Communicating at 2400 bps." 2
CommunicatingAt 2400
jump 60
!
@LABEL 41
note "Communicating at 4800 bps." 2
CommunicatingAt 4800
jump 60
!
@LABEL 42
note "Communicating at 7200 bps." 2
CommunicatingAt 7200
jump 60
!
@LABEL 43
note "Communicating at 9600 bps." 2
CommunicatingAt 9600
jump 60
!
@LABEL 44
note "Communicating at 12000 bps." 2
CommunicatingAt 12000
jump 60
!
@LABEL 45
note "Communicating at 14400 bps." 2
CommunicatingAt 14400
jump 60
!
@LABEL 46
note "Communicating at 16800 bps." 2
CommunicatingAt 16800
jump 60
!
@LABEL 47
note "Communicating at 19200 bps." 2
CommunicatingAt 19200
jump 60
!
@LABEL 48
note "Communicating at 21600 bps." 2
CommunicatingAt 21600
jump 60
!
@LABEL 49
note "Communicating at 24000 bps." 2
CommunicatingAt 24000
jump 60
!
@LABEL 50
note "Communicating at 26400 bps." 2
CommunicatingAt 26400
jump 60
!
@LABEL 51
note "Communicating at 28800 bps." 2
CommunicatingAt 28800
jump 60
!
@LABEL 52
note "Communicating at 31200 bps." 2
CommunicatingAt 31200
jump 60
!
@LABEL 53
note "Communicating at 33600 bps." 2
CommunicatingAt 33600
jump 60
!
@LABEL 54
note "Communicating at 38400 bps." 2
CommunicatingAt 38400
jump 60
!
@LABEL 55
note "Communicating at 48000 bps." 2
CommunicatingAt 48000
jump 60
!
@LABEL 56
note "Communicating at 56000 bps." 2
CommunicatingAt 56000
jump 60
!
@LABEL 57
note "Communicating at 57600 bps." 2
CommunicatingAt 57600
jump 60
!
@LABEL 58
note "Communicating at 64000 bps." 2
CommunicatingAt 64000
jump 60
!
@LABEL 59
note "Communicating at an unknown rate." 2
jump 60
!
! Look for reliablilty and compression results
! at the end of the connect result.
!
@LABEL 60
matchclr
matchstr 1 63 "LAPM"
matchstr 2 63 "REL"
matchstr 3 63 "ARQ"
matchstr 4 68 "COMP/"
matchstr 5 68 "COMP\13"
matchstr 6 63 "V42/"
matchstr 7 63 "V42\13"
matchstr 8 68 "V42BIS"
matchstr 9 68 "V42bis"
matchstr 10 63 "MNP\13"
matchstr 11 68 "MNP5"
matchstr 12 70 "\10"
matchread 30
jump 70
!
! -- Modem error correction link negotiation --
! Userhook 2 informs ARA that a modem-to-modem error
! correcting protocol has been negotiated
!
!
@LABEL 62
note "Modem Reliable Link Established." 2
userhook 2
jump 32
!
@LABEL 63
note "Modem Reliable Link Established." 2
userhook 2
jump 60
!
! -- Compression negotiation --
! Userhook 3 informs ARA that a modem-to-modem compression
! protocol has been negotiated
!
@LABEL 67
note "Modem Compression Established." 2
userhook 3
jump 32
!
@LABEL 68
note "Modem Compression Established." 2
userhook 3
jump 60
!
!
! -- Normal exit after "CONNECT" --
!
! This modem has been setup to do CTS handshaking,
! and we assume that a CTS handshaking cable is being used.
!
@LABEL 70
! Turn on CTS handshaking.
HSReset 0 1 0 0 0 0
!
ifANSWER 71
pause 30
@LABEL 71
exit 0
!
!
! ---- Answer calls ----
!
! (Converted active ATA answering to a passive FAX/DATA discrimination method.)
!
@LABEL 81
ifORIGINATE 32
note "Answering phone..." 2
jump 32
!
@LABEL 82
note "Answering Fax call..."
matchclr
matchstr 1 83 "CONNECT\13\10"
matchread 100
jump 101
!
@LABEL 83
settries 1225
sbreak
pause 80
note "A Fax call was received, but could not be answered."
settries 0
jump 95
!
@LABEL 84
!
! Incoming call is DATA, not FAX.
! For GlobalFax, answering port speed was 19.2k. If compression is on (PPP), set
! a serial port speed of 115.2k. Otherwise, we're in ARA, so jump to 85.
!
! Tell ARA to claim the serial port
!
userhook 1
ifstr 5 85 "0"
serreset 115200, 0, 8, 1
write "ATO\13"
jump 32
!
@LABEL 85
!
! Answering port speed is still 19.2k. Compression is off (ARA). Use 38.4k.
!
serreset 38400, 0, 8, 1
write "ATO\13"
jump 32
!
!
@LABEL 88
!
! Attempt to set Answer mode w/FAX/DATA discrimination, then go into wait mode.
! If the modem cannot do FAX/DATA discriminination, jump to 89.
!
write "AT~GR0\13"
pause 3
matchclr
matchstr 1 32 "OK\13\10"
matchstr 2 89 "ERROR\13\10"
write "AT+FAE=1S0=1\13"
matchread 30
!
@LABEL 89
!
! Set regular answer mode, for modems that don't do FAX/DATA discrimination.
!
matchclr
matchstr 1 32 "OK\13\10"
write "ATS0=1\13"
matchread 30
jump 101
!
!
! ---- Hang up and reset modem ----
!
@HANGUP
!
! If we do this too long, exit.
iftries 1225 99
!
@LABEL 90
!
settries 0
HSReset 0 0 0 0 0 0
!
@LABEL 91
!
! Try to get control of the modem
!
DTRClear
Pause 5
DTRSet
flush
!
@LABEL 94
!
! Force a hangup
!
matchclr
matchstr 1 98 "NO CARRIER\13\10"
matchstr 2 98 "OK\13\10"
matchstr 3 98 "ERROR\13\10"
matchstr 4 98 "0\13\10"
matchstr 5 98 "DELAYED"
matchstr 6 98 "BLACKLISTED"
write "ATH\13"
matchread 30
!
! Try again to get control of the modem by toggling DTR
!
@LABEL 95
DTRClear
Pause 5
DTRSet
flush
!
!
! Escape from data to command mode using standard +++ command
!
matchclr
matchstr 1 96 "OK\13\10"
pause 15
write "+++"
matchread 15
!
!
! Try the hangup sequence three times otherwise declare an error
!
inctries
iftries 3 101
jump 95
!
@LABEL 96
!
! Pause between data and command mode
!
pause 50
jump 94
!
!
@LABEL 97
!
! AT&F1 resulted in Error, try again using AT&F
!
pause 15
matchclr
matchstr 1 99 "OK\13\10"
write "AT&FS0=0\13"
matchread 30
jump 101
!
@LABEL 98
!
! Got control of the modem. Recall the factory settings. If it fails, jump 97.
!
pause 15
matchclr
matchstr 1 99 "OK\13\10"
matchstr 2 97 "ERROR\13\10"
write "AT&F1S0=0\13"
matchread 30
jump 101
!
@LABEL 99
exit 0
!
!
! ---- Error messages -----
!
! Modem Not Responding
@LABEL 101
exit -6019
!
! No Dial Tone
@LABEL 102
exit -6020
!
! No Carrier or Error
@LABEL 103
exit -6021
!
! Busy
@LABEL 104
exit -6022
!
! No Answer
@LABEL 105
exit -6023
!
! User Cancellation
@LABEL 107
exit -6008
!
!
! ---- DELAYED and BLACKLISTED functions ----
!
@LABEL 110
matchclr
matchstr 1 119 "00:00:0"
matchstr 2 118 "00:00:1"
matchstr 3 117 "00:00:2"
matchstr 4 116 "00:00:3"
matchstr 5 115 "00:00:4"
matchstr 6 114 "00:00:5"
matchstr 7 113 "00:01:"
matchstr 8 112 "00:02:"
matchread 30
!
! The number is 'DELAYED' more than 3 minutes. Exit the script telling the user to wait or reset his modem.
!
exit -6019 "\13The modem responds 'DELAYED':\13(Cannot redial this number right now.)\13To try again immediately, turn modem OFF and ON before proceeding."
!
@LABEL 111
!
! The number is 'BLACKLISTED'. Exit the script, telling the user to reset his modem.
!
exit -6019 "\13The modem responds 'BLACKLISTED':\13(Cannot redial this number again.)\13Double-check the number, then turn your modem OFF and ON before proceeding."
!
@LABEL 112
note "'DELAYED'. Redialing in 3 minutes..."
pause 600
@LABEL 113
note "'DELAYED'. Redialing in 2 minutes..."
pause 600
@LABEL 114
note "'DELAYED'. Redialing in 1 minute... "
pause 100
@LABEL 115
note "'DELAYED'. Redialing in 50 seconds..."
pause 100
@LABEL 116
note "'DELAYED'. Redialing in 40 seconds..."
pause 100
@LABEL 117
note "'DELAYED'. Redialing in 30 seconds..."
pause 100
@LABEL 118
note "'DELAYED'. Redialing in 20 seconds..."
pause 100
@LABEL 119
note "'DELAYED'. Redialing in 10 seconds..."
pause 100
jump 1
!
!
! Labels 121-128 are reserved for emergency hacks.